// 1793. [滑窗]给定差值的组合  https://oj.rnd.huawei.com/problems/1793/details
// 双指针,滑窗
//给定一个数组，每个元素的值是唯一的，找出其中两个元素相减等于给定差值 diff
//的所有不同组合的个数。 组合是无序的：如：（1, 4)和(4, 1)表示的是同一个组合。
//输入三行:
//第一行为一个整数，表示给定差值diff；范围[-50000, 50000]
//第二行也为一个数字，表示数组的长度；范围[2, 102400]
//第三行为该数组，由单个空格分割的一组数字组成；其中元素的值范围[-20, 102400]
//用例保证第三行数字和空格组成的字符串长度不超过 649999
//输出 1个整数，表示满足要求的不同组合的个数
//输入 3
// 5
// 1 3 2 5 4
//输出 2
//数组为[1 3 2 5 4]， 差值 diff 为 3，其中 4 - 1 = 3，5 - 2 = 3，共 2
//个组合满足条件，因此输出 2 输入 -1
// 3
// 1 2 3
//输出 2 其中 1 - 2 = -1，2 - 3 = -1，共 2 个组合满足条件，因此输出 2。
// 3
// 7
// 1 3 2 5 4 6 9
//================
// 1,2,3,4,5,6,9
// cmp===1,1,[3]
// cmp===1,2,[2]
// cmp===1,3,[1]
// cmp===1,4,[0]
// cmp===1,5,[-1]
// cmp===2,5,[0]
// cmp===2,6,[-1]
// cmp===3,6,[0]
// cmp===3,9,[-3]
// cmp===6,9,[0]

#include <bits/stdc++.h>
using namespace std;

//#define DEBUG
#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif

int cmp(int diff, int left, int right) {
  if (diff > 0) {
    return left + diff - right;
  }
  return left - diff - right;
}

// 待实现函数，在此函数中填入答题代码
int Proc(const vector<int>& arr_, int diff) {
  // 需要考虑0
  if (diff == 0) {
    return 0;
  }
  auto myarr(arr_);
  std::sort(myarr.begin(), myarr.end());
  for (auto ss : myarr) PF("%d,", ss);
  PF("====%d====\n", diff);
  int count = 0;
  size_t lenTotal = myarr.size();
  for (size_t left = 0, right = 0; left < lenTotal && right < lenTotal;
       right++) {
    int nCmp = cmp(diff, myarr[left], myarr[right]);
    PF("cmp===%d,%d,[%d]\n", myarr[left], myarr[right], nCmp);
    if (nCmp == 0) {
      count++;
    } else if (nCmp < 0) {
      while (cmp(diff, myarr[left], myarr[right]) < 0 && left < lenTotal) {
        left++;
      }
      right--;  // 下次右针不移动
    }
  }
  return count;
}

// 以下为考题输入输出框架，此部分代码不建议改动
int main() {
  string line;
  getline(cin, line);
  int diff = stoi(line);
  getline(cin, line);
  int n = stoi(line);
  vector<int> arr(n);
  for (int i = 0; i < n; ++i) {
    cin >> arr[i];
  }
  cout << Proc(arr, diff) << endl;
  return 0;
}
